// reflect1.go
package main

import (
	"fmt"
	"reflect"
)

type X int

func main() {
	var a X = 100
	t := reflect.TypeOf(a)
	fmt.Println(1, t.Name(), t.Kind())

	//构造array，第一个时长度，第二个是类型
	b := reflect.ArrayOf(10, reflect.TypeOf(byte(0)))
	fmt.Println(2, b)

	//构造slice，就是类型
	c := reflect.SliceOf(reflect.TypeOf(int(0)))
	fmt.Println(3, c)

	//构造map结构，第一个时key，第二个时value
	d := reflect.MapOf(reflect.TypeOf(""), reflect.TypeOf(0))
	fmt.Println(4, reflect.TypeOf(d))
	fmt.Println(5, d)

	x := 100
	tx, tp := reflect.TypeOf(x), reflect.TypeOf(&x)
	fmt.Println(6, tx, tp, tx == tp)
	fmt.Println(7, tx.Kind(), tp.Kind())
	fmt.Println(8, tx == tp.Elem())

	dx := reflect.TypeOf([]int32{})
	fmt.Println(9, dx.Elem())

	dx1 := reflect.TypeOf(map[string]int{})
	fmt.Println(10, dx1.Elem())

}
